//package com.open.chat.server.handler;
//
//import java.util.Iterator;
//import java.util.List;
//import java.util.Set;
//
//import org.apache.commons.lang3.StringUtils;
//import org.apache.rocketmq.common.message.MessageExt;
//import org.jim.core.ImConst;
//import org.jim.core.ImConst.Protocol;
//import org.jim.core.cache.redis.JedisTemplate;
//import org.jim.core.cache.redis.RedisCache;
//import org.jim.core.cache.redis.RedisCacheManager;
//import org.jim.core.config.ImConfig;
//import org.jim.core.message.MessageHelper;
//import org.jim.core.packets.Group;
//import org.jim.core.packets.User;
//import org.jim.core.packets.UserStatusType;
//import org.jim.server.JimServerAPI;
//import org.jim.server.config.ImServerConfig;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.stereotype.Component;
//import org.springframework.util.CollectionUtils;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONObject;
//import com.open.chat.server.common.Common;
//import com.open.chat.server.common.redis.CommonKey;
//import com.lets.psccs.mq.core.ServiceConsumeHandler;
//import com.lets.psccs.mq.core.packages.ChatUserBody;
//
//@Component
//public class MqCousumeHandler extends ServiceConsumeHandler<ChatUserBody> {
//	
//	private static Logger logger = LoggerFactory.getLogger(MqCousumeHandler.class);
//	
//    @Override
//    public Class<ChatUserBody> bodyClass() {
//        return ChatUserBody.class;
//    }
//    //消费消息
//    @Override
//    public boolean handler(List<MessageExt> msgs, List<ChatUserBody> message) {
//
//    	ChatUserBody  body = message.get(0);
//		logger.info("消費PSCCS服務信息:{}", JSON.toJSONString(body));
//    	ImServerConfig imServerConfig = ImConfig.Global.get();
//		MessageHelper messageHelper = imServerConfig.getMessageHelper();
//		
//		
//    	if(body != null) {
//    		if(body.getOper() == 1 || body.getOper() == 2 ) {
//    			JSONObject  data  = body.getJson();
//    			if(data != null) {
//        			//同步最新用户信息
//        			User.Builder builder = 
//        						User.newBuilder()
//        						.userId(data.getString("systemNumber"))
//        						.nick(data.getString("name"))
//        						.avatar(data.getString("headImg"))
//        						//默认都是ws
//        						.terminal(Protocol.WEB_SOCKET)
//        						//额外参数拓展
//        						.addExtra(Common.UserInfoExtKeys.id, data.getString("id"))
//        						.addExtra(Common.UserInfoExtKeys.sex, data.getString("sex"))
//        						.addExtra(Common.UserInfoExtKeys.email, data.getString("email"))
//        						.addExtra(Common.UserInfoExtKeys.department, data.getString("dept"))
//        						.addExtra(Common.UserInfoExtKeys.position, data.getString("job"))
//        						.addExtra(Common.UserInfoExtKeys.policeType, data.getString("policeType"))
//        						;
//        			
//        			User user = builder.build();
//        			
//        			String userId = user.getUserId();
//        			if(StringUtils.isEmpty(userId)) {
//        				logger.error("用户ID不存在,无法同步添加");
//        				return true;
//        			}
//        			
//        			//新增的用户默认找不到，是false；编辑的用户可能在线
//        			boolean status = messageHelper.isOnline(userId);
//        			user.setStatus(status ?UserStatusType.ONLINE.getStatus() : UserStatusType.OFFLINE.getStatus());
//        			//维护缓存
//    				messageHelper.updateUserTerminal(user);
//        			//维护人的信息及同步在线信息
//        			RedisCache userCache = RedisCacheManager.getCache(ImConst.USER);
//        			userCache.put(userId+CommonKey.SUFFIX+ImConst.INFO, user.clone());
//        			
//        		}
//    		}
//    			
//    		
//    		if(body.getOper() == 3) {
//    			JSONObject  data  = body.getJson();
//    			if(data != null) {
//    				String userId = data.getString("systemNumber");
//    				RedisCache userCache = RedisCacheManager.getCache(ImConst.USER);
//    				
//    				User user = userCache.get(userId+CommonKey.SUFFIX+ImConst.INFO , User.class);
//    				if(user == null) {
//    					logger.error("用户{}不存在,无法删除",userId);
//    					return true;
//    				}
//    				
//    				//逻辑上解绑用户所有的组 和 所有组把用户给移除
//    				JimServerAPI.unbindUser(userId);
//    				List<String> groups = messageHelper.getGroups(userId);
//    				for(String groupId : groups) {
//    					//解绑组
//    					//JimServerAPI.unbindGroup(user.getUserId(), groupId);
//    					//删除所有的维护关系
//    					//messageHelper.removeGroupUser(user.getUserId(), groupId);
//    					
//    					//群组离线消息
//        				//RedisCacheManager.getCache(ImConst.PUSH).remove(ImConst.GROUP+CommonKey.SUFFIX+groupId+CommonKey.SUFFIX+userId);
//        				
//        				//通知所有组，该人被移除.该人和组可能是成员关系，也可以是群主关系
//        				Group g = RedisCacheManager.getCache(ImConst.GROUP).get(groupId+CommonKey.SUFFIX+ImConst.INFO , Group.class);
//        				//如果是群主解散群，否则移除
//        				if(userId.equals(g.getLeaderId())) {
//        					GroupHelper.unbind(userId,groupId);
//        				}else {
//        					GroupHelper.removeUser(groupId, user);
//        				}
//        				
//    				}
//    				//物理删除用户的所有数据
//    				RedisCacheManager.getCache(ImConst.USER).remove(userId);
//					
//    				//个人离线消息   要求是把相互发送的都去掉
//    				//ImConst.PUSH + CommonKey.SUFFIX + ImConst.USER + CommonKey.SUFFIX + userId + CommonKey.SUFFIX + fromUserId
//    				GroupHelper.removeOfflineMsg(userId);
//    				
//        			
//        		}
//    		}
//
//    	}
//    	
//       
//        return true;
//    }
//    
//    
//   
//    
//}
